package com.fc.advbox.utils;

import java.math.BigDecimal;

/**
 * 常量
 * 
 * @author Rocky

 * @date 2016年11月15日 下午1:23:52
 */
public class Constant {
	/** 超级管理员ID */
	public static final int SUPER_ADMIN = 1;

	/* 查询时，默认启动从1开始 */
	public static final int DEFAULT_PAGE = 1;
	public static final String DEFAULT_PAGE_NAME = "page";
	/* 查询时，偏移量，默认启动从0开始 */
	public static final int DEFAULT_OFFSET = 0;
	public static final String DEFAULT_OFFSET_NAME = "offset";
	/* 每次查询的个数*/
	public static final int DEFAULT_LIMIT = 10;
	public static final String DEFAULT_LIMIT_NAME = "limit";

	public static final BigDecimal DEFAULT_EQUIPMENT_DAILY_COST = BigDecimal.ZERO; // TODO 机器日消耗暂时设置为0, 将来需要修改

    public static final BigDecimal DEFAULT_TOKEN_EXTRACT_SERVICE_CHARGE_NUMBER = new BigDecimal(2000);
	/**
	 * 菜单类型
	 * 
	 * @author Rocky

	 * @date 2016年11月15日 下午1:24:29
	 */
    public enum MenuType {
        /**
         * 目录
         */
    	CATALOG(0),
        /**
         * 菜单
         */
        MENU(1),
        /**
         * 按钮
         */
        BUTTON(2);

        private int value;

        private MenuType(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }
    
    /**
     * 定时任务状态
     * 
     * @author Rocky

     * @date 2016年12月3日 上午12:07:22
     */
    public enum ScheduleStatus {
        /**
         * 正常
         */
    	NORMAL(0),
        /**
         * 暂停
         */
    	PAUSE(1);

        private int value;

        private ScheduleStatus(int value) {
            this.value = value;
        }
        
        public int getValue() {
            return value;
        }
    }

    /**
     * 云服务商
     */
    public enum CloudService {
        /**
         * 七牛云
         */
        QINIU(1),
        /**
         * 阿里云
         */
        ALIYUN(2),
        /**
         * 腾讯云
         */
        QCLOUD(3);

        private int value;

        private CloudService(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 状态
     */
    public enum Status{
        /* 正常 */
        ENABLE(1),
        /* 禁用 */
        DISABLE(0);

        private int value;

        private Status(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    public enum StatusDisplay{
        /* 正常 */
        ENABLE(1,"正常"),
        /* 禁用 */
        DISABLE(0,"禁用");

        private int value;
        private String displayName;

        private StatusDisplay(int value, String displayName) {
            this.value = value;
            this.displayName = displayName;
        }

        public int getValue() {
            return value;
        }

        public String getDisplayName() {return displayName;}
    }

    /**
     * 登陆类型
     */
    public enum LoginMethod {
        /* 用户名密码登陆 */
        USER_NAME_PASSWORD("BY_USERNAME"),
        /* 手机号码密码登陆 */
        PHONE_PASSWORD("BY_PHONE"),
        /* 手机号码 验证码登陆 */
        PHONE_SMS_CODE("BY_SMS_CODE");

        private String value;

        private LoginMethod(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 设备状态定义
     */
    public enum EquipmentStatus
    {
        /* 开发出租 */
        OPEN("open"),
        /* 暂时冻结，不可出租 */
        BLOCKING("blocking"),
        /* 出租中 */
        RENTING("renting"),
        /* 维修中 */
        MAINTAINING("maintaining"),
        /* 丢弃, 损坏 */
        DISCARD("discard");

        private String value;

        private EquipmentStatus(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 设备维修状态定义
     */
    public enum EquipmentMaintainStatus
    {
        /* 正在维修中 */
        MAINTAINING("maintaining"),
        /* 维修完成 */
        MAINTAINED("maintained"),
        /* 丢弃, 损坏 */
        DISCARD("discard");

        private String value;

        private EquipmentMaintainStatus(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public static boolean verify(String type)
        {
            for(EquipmentMaintainStatus ct: values())
            {
                if(ct.getValue().equalsIgnoreCase(type))
                {
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 合同类型定义
     */
    public enum ContractType
    {
        /* 代理合同 */
        AGENT("AGENT"),
        /* 渠道合同 */
        CHANNEL("CHANNEL"),
        /* 租赁合同 */
        RENT("RENT");

        private String value;

        private ContractType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
        public static boolean verify(String type) {
            for(ContractType ct: values()){
                if(ct.getValue().equalsIgnoreCase(type)){
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 合同状态
     */
    public enum ContractStatus
    {
        /* 初稿，第一次保存，可以修改*/
        DRAFTING("drafting"),
        /* 已确认，已生效，不可修改 */
        CONFIRMED("confirmed"),
        /* 合同终止 */
        TERMINATION("termination");

        private String value;

        private ContractStatus(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 机构类型
     */
    public enum OrgType{
         /*管理公司*/
         OWNER("OWNER"),
        /*代理商*/
        AGENT("AGENT"),
        /*渠道商*/
        CHANNEL("CHANNEL"),
        /*广告租赁商 */
        RENT("RENT");

        private String value;

        private OrgType(String value){
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public static boolean verify(String type) {
            for(OrgType ct: values()){
                if(ct.getValue().equalsIgnoreCase(type)){
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 机构类型
     */
    public enum UserType{
        /*管理公司*/
        OWNER("OWNER",1,"MANAGE_USER"),
        /*代理商*/
        AGENT("AGENT",2,"AGENT_USER"),
        /*渠道商*/
        CHANNEL("CHANNEL",3,"AGENT_USER"),
        /*广告租赁商 */
        RENT("RENT",4,"TENANT_USER"),
        /*投资人*/
        INVESTOR("INVESTOR",5,"INVESTOR");

        private String name;
        private Integer value;
        private String roleName;

        UserType(String name, Integer value, String defaultRoleName){
            this.name = name; this.value = value; this.roleName = defaultRoleName;
        }

        public String getName(){
            return name;
        }
        public Integer getValue() {
            return value;
        }
        public String getRoleName(){
            return roleName;
        }
    }
    /**
     * 机构状态
     */
    public enum OrgStatus{
        INACTIVE, ACTIVE, EXPIRED;

        public static boolean verify(int status) {
            for(OrgStatus ct: values()){
                if(ct.ordinal() == status){
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 设备状态定义
     */
    public enum AssetStatus
    {
        /* 可用的 */
        ACTIVE("active"),
        /* 不可用 */
        INACTIVE("inactive"),
        /* 已到期，可赎回 */
        DUE("due"),
        /*已赎回*/
        REDEEMED("redeemed");


        private String value;

        private AssetStatus(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 账户类型
     */
    public enum AcctType
    {
        /* 现金投资账户 */
        CASH("现金账户"),
        /* 虚拟币投资账户 */
        VCOIN("币账户");


        private String value;

        private AcctType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 交易类型
     */
    public enum AcctTxnType
    {
        MONTHLY_INTEREST_SETTLE("月息结算"),
        BUY("购买"),
        REDEEM("赎回"),
        TRANS("转让"),
        INTO_CASH("提现");


        private String value;

        private AcctTxnType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 虚拟币账号类型
     */
    public enum TokenAccountType {
        /*KEY*/
        KEY("key"),
        /*EOS*/
        EOS("eos"),
        /*PAI*/
        PAI("pai");

        private String value;

        private TokenAccountType(String value){
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public static boolean verify(String type) {
            for(TokenAccountType ct: values()){
                if(ct.getValue().equalsIgnoreCase(type)){
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 虚拟币转换类型. changeType: 转换类型 toAble( 解锁中 ---> 可用 ) / toDeblocking(锁定 ---> 解锁中) / toLock(可用 ---> 锁定)
     */
    public enum TokenChangeType {
        /*解锁中 ---> 可用*/
        TO_ABLE("toAble"),
        /*锁定 ---> 解锁中*/
        TO_DEBLOCKING("toDeblocking"),
        /*可用 ---> 锁定*/
        TO_LOCK("toLock"),
        /*解锁中 ---> 锁定*/
        DEBLOCKING_TO_LOCK("deblockingToLock");

        private String value;

        private TokenChangeType(String value){
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public static boolean verify(String type) {
            for(TokenChangeType ct: values()){
                if(ct.getValue().equalsIgnoreCase(type)){
                    return true;
                }
            }
            return false;
        }
    }

}
